// console.log('1');
//
// setTimeout(function() {
//   console.log('2');
//   process.nextTick(function() {
//     console.log('3');
//   })
//   new Promise(function(resolve) {
//     console.log('4');
//     resolve();
//   }).then(function() {
//     console.log('5')
//   })
// })
// process.nextTick(function() {
//   console.log('6');
// })
// new Promise(function(resolve) {
//   console.log('7');
//   resolve();
// }).then(function() {
//   console.log('8')
// })
//
// setTimeout(function() {
//   console.log('9');
//   process.nextTick(function() {
//     console.log('10');
//   })
//   new Promise(function(resolve) {
//     console.log('11');
//     resolve();
//   }).then(function() {
//     console.log('12')
//   })
// })
// 1 7 6 8 2 4 3 5 9 11 10 12


// new Promise((resolve, reject)=>{
//   console.log('promise1')
//   resolve();
// }).then(()=>{
//   console.log('then1')
// })
//
// setTimeout(()=>{
//   console.log('setTimeout1')
// })
// console.log(2)
//
// queueMicrotask(()=>{
//   console.log('queueMicrotask')
// })
// new Promise((resolve)=>{
//   resolve()
// }).then(()=>{
//   console.log('then3')})
//
// console.log('script end')


//promise1 2 script end then1 queueMicrotask then3 setTimeout1

async function async1(){
  console.log('async start')
  await async2()
  console.log('async end')
}

async function async2(){
  return new Promise((resolve, reject)=>{
    setTimeout(()=>{
      console.log('async2')
      resolve()
    },5000)
  })
}

console.log('script start')

setTimeout(()=>{
  console.log('setTimeout')
},0)

async1()

new Promise((resolve)=>{
  console.log('promise1')
  resolve()
}).then(()=>{
  console.log('promise2')
})

// script start
// async start
// promise1
// promise2
// setTimeout
// async2
// async end



